import fs from 'fs';
import path from 'path';
import { v4 as uuidv4 } from 'uuid';
import formidable from 'formidable';

// 禁用Next.js的请求体解析，因为我们使用formidable手动处理文件上传
export const config = {
  api: {
    bodyParser: false,
  },
};

// 配置上传目录
const UPLOAD_DIR = path.join(process.cwd(), 'frontend/uploads');

// 确保目录存在
if (!fs.existsSync(UPLOAD_DIR)) {
  fs.mkdirSync(UPLOAD_DIR, { recursive: true });
}

export default async function handler(req, res) {
  if (req.method !== 'POST') {
    return res.status(405).json({ 
      code: 405, 
      message: '方法不允许' 
    });
  }

  try {
    // 使用formidable解析请求
    const form = new formidable.IncomingForm({
      uploadDir: UPLOAD_DIR,
      keepExtensions: true,
      maxFileSize: 5 * 1024 * 1024, // 5MB (图片限制)
    });

    // 解析表单
    form.parse(req, (err, fields, files) => {
      if (err) {
        console.error('图片上传错误:', err);
        return res.status(500).json({
          code: 500,
          message: '图片上传失败'
        });
      }

      // 获取上传的文件
      const file = files.file;
      
      if (!file) {
        return res.status(400).json({
          code: 400,
          message: '没有选择图片'
        });
      }

      // 检查文件类型是否为图片
      if (!file.mimetype || !file.mimetype.startsWith('image/')) {
        // 删除非图片文件
        fs.unlinkSync(file.filepath);
        
        return res.status(400).json({
          code: 400,
          message: '请上传图片文件'
        });
      }

      // 生成唯一ID
      const fileId = uuidv4();
      const originalPath = file.filepath;
      const fileName = `${fileId}_${file.originalFilename}`;
      const uploadPath = path.join(UPLOAD_DIR, fileName);

      // 移动文件到最终位置
      fs.rename(originalPath, uploadPath, (err) => {
        if (err) {
          console.error('图片处理错误:', err);
          return res.status(500).json({
            code: 500,
            message: '图片处理失败'
          });
        }

        // 返回成功信息
        res.status(200).json({
          code: 200,
          message: '图片上传成功',
          data: {
            fileName: file.originalFilename,
            fileId: fileId,
            size: file.size,
            mimeType: file.mimetype
          }
        });
      });
    });
  } catch (error) {
    console.error('图片上传异常:', error);
    res.status(500).json({
      code: 500,
      message: '服务器内部错误'
    });
  }
} 